﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqToMyClass
{
    class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<MyClass1> resultado;

            //WriteExampleHeading("Exemplo - Pesquisar por Visible em MyClass1?");
            //resultado = from classe in MyClass1.GetMyClasses()
            //            where classe.Visible
            //            select classe;
            //WriteResult<MyClass1>(resultado);
















            //WriteExampleHeading("Exemplo - Pesquisar por Visible em MyClass1 - Métodos de Extensão");
            //resultado = MyClass1.GetMyClasses().WhereVisible(t => t.Prop2.Contains("1"), true);
            //WriteResult<MyClass1>(resultado);











            //WriteExampleHeading("Exemplo - Pesquisar por Visible em MyClass1 - Métodos de Extensão");
            //resultado = from classe in MyClass1.GetMyClasses().GetVisible(false                        //where classe.Prop2.Contains("a")
            //            select classe;
            //WriteResult<MyClass1>(resultado);


            Console.ReadLine();

        }

        #region Helper Methods

        private static void WriteExampleHeading(string descricaoExemplo)
        {
            if (first)
                first = false;
            else
                Console.WriteLine(Environment.NewLine);
            Console.WriteLine(descricaoExemplo + Environment.NewLine);
        }
        private static void WriteResult<T>(IEnumerable<T> resultados)
        {
            foreach (T resultado in resultados)
            {
                WriteObject(resultado);
            }
        }
        private static void WriteObject(object objectToWrite)
        {
            MyClass1 obj = objectToWrite as MyClass1;
            if (obj != null)
            {
                Console.WriteLine("Prop1 = " + obj.Prop1 + ", Prop2 = " + obj.Prop2);
                return;
            }

        }

        static bool first = true;

        #endregion
 
    }
}
